﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//int main()
//{
//	char arr[3][3] = { ' ' };
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 3; j++)
//		{
//			printf("arr[%d][%d] = %c\n", i, j, arr[i][j]);
//		}
//	}
//
//	return 0;
//}

//int main()
//{
//	//字符串数组
//	char arr[3][3] = "";//null  0  '0'
//	char arr[3][3] = { '' };
//	
//
//	return 0;
//}

//int main()
//{
//	//多组输入，缓冲区
//	char ch = 0;
//	while (scanf("%c", &ch) != EOF)
//	{
//		//从缓冲区获取字符，到空格' '或换行符'\n'处停止
//		//二次读入直接将缓冲区中剩余的'\n'读走
//		//一次读走一个字符 
//		//putchar(ch);//无换行
//		if ('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z')//字母的ASCII码值
//		{
//			//printf("输出>:");
//			printf("%c is a alphabet\n", ch);
//		}
//		else
//		{
//			//printf("输出:>");
//			printf("%c is not a alphabet\n", ch);
//		}
//		//清空缓存区
//		//while (getchar() != '\n')
//		//{
//		//	;
//		//}
//	}
//
//	return 0;
//}


//操作符详解
//移位操作符
// >>右移
//算术移位：左侧补符号位，右侧舍弃
//逻辑移位：左侧补0
//C语言中未做明确规定
//VS中为进行算术移位
//int main()
//{
//
//
//	return 0;
//}

// <<左移
//左侧补0，右侧舍去
//int main()
//{
//
//
//	return 0;
//}

//整数在内存中以二进制补码（32bit）的形式存储，以原码的形式显示
//正数的原码，反码，补码都相同
//负数: 例，-5
//最高位为符号位
//原码：10000000000000000000000000000101
//反码符号位不变，有效位按位取反
//反码：11111111111111111111111111111010
//补码位反码 + 1
//补码：11111111111111111111111111111011




//交换两个变量（不创建临时变量）
//int main()
//{
//	//按位与，按位或，按位异或
//	//int i = 10;
//	//int j = 20;
//	int i = 3;
//	//00000000000000000000000000000011
//	int j = -5;
//	//10000000000000000000000000000101
//	//11111111111111111111111111111010
//	//11111111111111111111111111111011
//	//异或，不同为一，相同为零
//	//a ^ a = 0;
//	//a ^ 0 = a;
//	//异或运算支持交换律
//	i = i ^ j;
//	j = i ^ j;//<1> j = i ^ j ^ j  <2> j = 0 ^ i
//	i = i ^ j;//<1> i = i ^ j ^ i  <2> i = 0 ^ j
//	printf("i = %d\n", i);
//	printf("j = %d\n", j);
//
//	return 0;
//}


//统计二进制中1的个数
//int main()
//{
//	int i = 0;
//	int j = 0;
//	int a = 0;
//	int count = 0;
//	scanf("%d", &i);
//	//以二进制形式输出
//	//以八进制形式%o
//	//以十六进制形式输出%x
//	for (j = 1; a < 32; a++, j <<= 1)
//	{
//		if ((i & j) != 0)//阐明&是否有优先级
//		{
//			count++;
//		}
//	}
//	printf("count = %d\n", count);
//
//	return 0;
//}


//打印整数二进制的奇数位和偶数位
//10101010
//2 + 8 + 32 + 128 = 170
//奇数位：0000
//偶数位：1111
//1 + 2 + 4 + 8 =15
//1010 (10)
//偶数：3
//奇数：0
//100D = 01100100
//奇数：1010B = 10D
//偶数：100B = 4D

//num       00000000000000000000000000001010
//a         00000000000000000000000000000010（2）
//按位与
//a & num   00000000000000000000000000000010
//如果(a & num)不等于sqrt(2)或者0，(a & num) >>= 1，或者循环31次
//次幂从0开始
//与j或
//j         00000000000000000000000000000001
//a右移两位
//a & num   00000000000000000000000000001000
//右移除2
#include <math.h>
//int main()
//{
//	int num = 0;// 0101010	二进制
//	scanf("%d", &num);//10	170
//	int m = 0;
//	//奇数位
//	//for(i = 2; ; i * 2)
//	//不符合循环条件
//	//会改变num的值
//	//int i = 2;
//	//while (num / i > 0)
//	//{
//	//	/*m = m | (num % 2);
//	//	num /= 4;*/
//	//	//m = m | (num % i);
//	// 
//	//	int j = (num % i);
//	//	//不能得到需要的二进制位
//	//	if (i > 2)
//	//	{
//	//		j <<= (i / 2);
//	//	}
//	//	m = m | j;
//	//	i *= 4;
//
//	//	//num /= 4;
//	//}
//	int num2 = num;
//	int i = 1;
//	while (num2 > 0)
//	{
//		//int i = 1;
//		//int num2 = num;
//		//每次循环重新定义
//		int j = (num2 % 2);
//		if (num2 < num)
//		//用已有变量的关系来确定约束条件
//		{
//			j <<= i;
//			i++;
//			//给数赋值
//		}
//		m = m | j;
//		num2 /= 4;
//	}
//	printf("奇数位为%d\n", m);
//	int n = 0;
//	//偶数位
//	//i = 4;
//	//while (num / i > 0)
//	//{
//	//	/*n = n | (num % 4);
//	//	num /= 4;*/
//	//	//n = n | (num % i);
//
//	//	int j = (num % i);
//	//	if (i > 4)
//	//	{
//	//		j <<= (i / 4);
//	//	}
//	//	n = n | j;
//	//	i *= 4;
//	//}
//	num2 = num / 2;
//	i = 1;
//	while (num2 > 0)
//	{
//		//int i = 1;
//		int j = (num2 % 2);
//		if (num2 < num / 2)
//		{
//			j <<= i;
//			i++;
//			//第一次右移一位，第二次两位，第三次三位，其后以此类推
//		}
//		n = n | j;
//		num2 /= 4;
//		//除以2右移一位
//	}
//	printf("偶数位为%d\n", n);
//
//	return 0;
//}

//int main()
//{
//	int num = 0;
//	int i = 0;//奇数位
//	int j = 0;//偶数位
//	int count = 0;
//	scanf("%d", &num);
//	//i | j
//	//~按位取反
//	//得到奇数位：与1按位或，1 右移两位
//	//得到偶数位：1 右移1位，与1按位或
//	int a = 0;
//	int c = 0;
//	for (a = 1; count < 32; a <<= 2, count += 2)
//	{
//		c = (a & num);
//		int n = 0;
//		while (c != sqrt(2, n) || c != 0)
//		{
//			c >>= 1;
//			n++;
//		}
//		i = i | c;
//		//奇数位
//	}
//	//while (count < 32)
//	//{
//	//	a = 2;
//	//	count = 0;
//	//	j = j | (a & num);
//	//	a <<= 2;
//	//	//偶数位
//	//	count++;
//	//}
//	for (a = 2; count < 32; a <<= 2, count += 2)
//	{
//		c = (a & num);
//		int n = 0;
//		while (c != sqrt(2, n) || c != 0)
//		{
//			c >>= 1;
//			n++;
//		}
//		j = j | (a & num);
//	}
//	printf("i = %d\nj = %d\n", i, j);
//
//	return 0;
//}


//求两个数二进制中不同位的个数
//10和20，当位数不同时?
//(10)B = 1010
//(20)B = 10100
//int main()
//{
//	int i = 0;
//	int j = 0;
//	int count = 0;
//	scanf("%d %d", &i, &j);
//	//奇数的最低二进制位都为1 ？
//	int a = i ^ j;
//	//位不同为1
//	//与1&不为0则加1
//	while (a != 0)
//	{
//		if ((a & 1) != 0)
//		{
//			count++;
//		}
//		a >>= 1;
//	}
//	printf("count = %d\n", count);
//
//	return 0;
//}

//将数组A中的内容和数组B中的内容进行交换。（数组一样大）
//int main()
//{
//	//int arr1[10] = { 1 };
//	//只有首元素初始化为1
//	int arr1[10] = { 0 };
//	int j = 0;
//	for (j = 0; j < 10; j++)
//	{
//		arr1[j] = 1;
//	}
//	int arr2[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		int tmp = 0;
//		tmp = arr1[i];
//		arr1[i] = arr2[i];
//		arr2[i] = tmp;
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("arr1[%d] = %d\n", i, arr1[i]);
//		printf("arr2[%d] = %d\n", i, arr2[i]);
//	}
//
//	return 0;
//}

//有序序列合并
//输出为一行，输出长度为n+m的升序序列
//序列
//存在问题：无法进行序列的存储，导致无法进行后续的排序
//解决方案：C语言中不存在变长数组的概念，那就是使得定义数组的长度绝对够用
//冒泡排序
//数组越界，堆栈溢出
//补充：数据范围： 1 <= n,m <= 1000
//序列中的值满足 ：0 <= val <= 30000
//int main()
//{
//	//用例输入
//	//3，2，4，8
//	//9，10，3，7，5
//	int n = 0;
//	int m = 0;
//	scanf("%d %d", &n, & m);//4，5
//	int arr1[12] = { 0 };
//	int arr2[12] = { 0 };
//	int i = 0;
//	//序列元素的输入与存储
//	//向缓存区一次键入多个元素，后续使用一次性读取
//	//getchar();
//	//等待从缓存区获取字符，一次获取一个字符，返回字符的ASCII码值
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr1[i]);
//		//3，2，4，8
//		//一次输入多个字符
//	}
//	for (i = 0; i < m; i++)
//	{
//		scanf("%d", &arr2[i]);
//		//9，10，3，7，5
//	}
//	//合并，排序
//	for (i = 0; i < m; i++)
//	{
//		arr1[i + n] = arr2[i];
//	}
//	//冒泡排序
//	//存在元素可能相等的情况
//	//5，7，8，3，10，4，5
//	//一趟
//	//5，7，3，8，4，5，10
//	//5，3，7，4，5，8，10
//	//3，5，4，5，7，8，10
//	//3，4，5，5，7，8，10
//	int j = 0;
//	for (j = 0; j < n + m; j++)
//	{
//		int flag = 0;
//		//有序
//		//for (i = 0; i - 1 < n + m; i++)
//		//多排序了两个元素
//		//一趟，确定一个元素
//		for (i = 0; i + 1 < n + m; i++)
//		{
//			if (arr1[i] > arr1[i + 1])
//			{
//				int tmp = arr1[i];
//				arr1[i] = arr1[i + 1];
//				arr1[i + 1] = tmp;
//				flag = 1;
//				//无序
//			}
//		}
//		if (flag == 0)
//		{
//			break;
//		}
//	}
//	//输出
//	for (i = 0; i < n + m; i++)
//	{
//		printf("%d ", arr1[i]);
//		//2，3，3，4，5，7，8，9，10
//	}
//
//
//	return 0;
//}

//#define N n
//#define M m

//int main()
//{
//    int n = 0;
//    int m = 0;
//    scanf("%d %d", &n, &m);
//    int arr1[] = { 0 };
//    int arr2[] = { 0 };
//    int i = 0;
//    for (i = 0; i < n; i++)
//    {//n元素行
//        int val = 0;
//        scanf("%d ", &val);
//        arr1[i] = val;
//        //printf("%d ", arr1[i]);
//    }
//    for (i = 0; i < n; i++)
//    {
//        printf("%d ",arr1[i]);
//    }
//    for (i = 0; i < m; i++)
//    {//m元素行
//        int val = 0;
//        scanf("%d ", &val);
//        arr2[i] = val;
//        printf("%d ", arr2[i]);
//    }
//    //升序
//
//
//    return 0;
//}

//有序序列判断
//数据范围 3 ~ 50 ，值范围 1 ~ 100
//输入一个整数序列，判断是否是有序序列
//有序：从小到大，相同元素也相当于有序
//元素个数不定，如何输入存储一个序列
//从小到大，从大到小皆可
//int main()
//{
//	int i = 0;
//	int j = 0;
//	int arr[50] = { 0 };
//	scanf("%d", &j);
//	for (i = 0; i < j; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int flag = 0;
//	//for (i = 0; i < j; i++)
//	for(i = 0; i < j - 1; i++)
//	//正序
//	{
//		if (arr[i] > arr[i + 1])
//		{
//			flag = 1;
//			break;
//			//无序
//		}
//	}
//	//逆序
//	for (i = 0; i < j; i++)
//	{
//		if (arr[i] < arr[i + 1])
//		{
//			break;
//		}
//		else
//		{
//			flag = 0;
//		}
//	}
//	if (flag == 0)
//	{
//		printf("sorted\n");
//	}
//	else
//	{
//		printf("unsorted\n");
//	}
//	return 0;
//}


//输入年份和月份，计算这一年这个月有多少天
//闰年二月为29天
//int main()
//{
//	int y = 0;
//	int m = 0;
//	/*printf("年份>:");
//	scanf("%d", y);
//	printf("月份>:");
//	scanf("%d", m);*/
//	//1，3，5，7，8，10，12（31天）
//	//4，6，9，11（30天）
//	//2月：闰年29天，非闰年28天
//	while (scanf("%d %d", &y, &m) == 2)
//	{
//		if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
//		{
//			printf("31天\n");
//		}
//		else if (m == 4 || m == 6 || m == 9 || m == 11)
//		{
//			printf("30天\n");
//		}
//		else
//		{
//			if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
//			{
//				printf("29天\n");
//			}
//			else
//			{
//				printf("28天\n");
//			}
//		}
//	}
//
//	return 0;
//}

//汉诺塔
//目标：把A杆上的金盘全部移到C杆上，并仍保持原有顺序叠好。
//操作规则：
//1. 每次只能移动一个盘子
//2. 并且在移动过程中三根杆上都始终保持大盘在下，小盘在上
//3. 操作过程中盘子可以置于A、B、C任一杆上
//当金盘数量为 n 时
#define NUM 5

//int main()
//{
//	//A杆
//	int arrA[NUM] = { 0 };
//	//B杆
//	int arrB[NUM] = { 0 };
//	//C杆
//	int arrC[NUM] = { 0 };
//	//为A杆依次放置金盘1,2,3,4,5
//	int i = 0;
//	for (i = 0; i < NUM; i++)
//	{
//		arrA[i] = i + 1;
//	}
//	//将A杆上的金盘挪移至C杆
//
//
//
//	return 0;
//}


//青蛙跳台阶
//青蛙可以跳上一级台阶，也可以跳上两级
//求青蛙跳上第n级台阶由多少中跳法




//整型提升
//int main()
//{
//	//char a = 0Xb6;
//	//10110110
//	//-74
//	//char a = 0b01011010;
//	//二进制输入 90
//	//从int 到 char的截断 
//	char a = 0b10110110;
//	//short b = 0Xb600;
//	short b = 0b1011011000000000;
//	//int c = 0b10000000000000000100101000000000;
//	//原码
//	int c = 0b11111111111111111011011000000000;
//	//存储补码
//	printf("%d\n", a);
//	printf("%d\n", b);
//	printf("%d\n", c);
//
//	return 0;
//}

//写一个函数打印arr数组的内容，不使用数组下标，使用指针
//arr是一个整形一维数组
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[0];
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 0; i < sz; i++)
//	{
//		//printf("%d ", *(p + i));
//		//* 解引用操作符的优先级高于 +
//		printf("%d ", *p++);
//		//后置++ 的优先级高于 *解引用操作符
//	}
//
//	return 0;
//}

//输入一个字符串（中间可以有空格）
//逆序输出，逆序一个字符串的内容，数据范围1 <= len(str) <= 10000
//写一个函数
//void re_order(char* pa)
//{
//	//递归
//	int sz = 0;
//	while (*pa++ != 0)
//	{
//		sz++;
//	}
//	int i = 0;
//	pa -= sz + 1;
//	sz -= 1;
//	while (i <= sz / 2)
//	{
//		char tmp = *(pa + sz - i);
//		*(pa + sz - i) = *(pa + i);
//		*(pa + i) = tmp;
//		i++;
//	}
//}
//
//int main()
//{
//	//用数组表示字符串
//	char arr[10000] = { '0' };
//	char* pa = arr;
//	//数组首元素地址，数组地址
//	/*while (*pa != 0)
//	{
//		scanf("%c", pa++);
//	}*/
//	//scanf("%s", pa);
//	char ret = 0;
//	int i = 0;
//	while(1)//while (ret != '\n')
//	{
//		ret = getchar();
//		if (ret == '\n')
//		{
//			break;
//		}
//		arr[i] = ret;
//		i++;
//	}
//	re_order(pa);
//	while(*pa != 0)//while (*pa++ != 0)
//	{
//		printf("%c", *pa);
//		pa++;
//	}
//
//	return 0;
//}

//打印图形
//共13行
//从1行到7行 1 个✳开始每行递增 2 个
//1 + 2 * 6 = 13
//从8行开始递减，递减至13行
//第一行6个空格，1个*
//*减1个，后加1个变成*
//int main()
//{
//	int i = 0;
//	int j = 0;
//	int a = 0;
//	for (i = 0; i < 13; i++)
//	{
//		for (j = 0; j <= 7 + a; j++)
//		{
//			if (j >= 7 - a  && j <= 7 + a)
//			{
//				printf("*");
//			}
//			else
//			{
//				printf(" ");
//			}
//		}
//		printf("\n");
//		if (i < 6)//增加6次
//		{
//			a += 1;
//		}
//		else
//		{
//			a -= 1;
//		}
//	}
//
//	return 0;
//}

//求出0～100000之间的所有“水仙花数”并输出
//“水仙花数”是指一个n位数，其各位数字的n次方之和确好等于该数本身
//如:153＝1 ^ 3＋5 ^ 3＋3 ^ 3，则153是一个“水仙花数”
#include <math.h>
//int main()
//{
//	int num = 0;
//	printf("请输入所需要判断的数:>");
//	scanf("%d", &num);
//	int i = 0;
//	//while (num / 10 != 0)//不会执行
//	//{
//	//	i++;
//	//}
//	int ret = num;
//	while (ret != 0)
//	{
//		ret /= 10;
//		i++;
//	}
//	int sum = 0;
//	ret = num;
//	while (ret != 0)
//	{
//		//sum += i * (ret % 10);
//		//各自数字的平方之和
//		//sum = sqrt(ret % 10, i);
//		int j = 0;
//		int sum2 = 1;
//		while (j < i)
//		{
//			sum2 *= ret % 10;
//			j++;
//		}
//		sum += sum2;
//		ret /= 10;
//	}
//	if (sum == num)
//	{
//		printf("输入数字为水仙花数\n");
//	}
//	else
//	{
//		printf("不是水仙花数\n");
//	}
//
//	return 0;
//}
//5 变量，变量引入过多，优化
//判断过程，确认数字位数，计算


//求Sn = a + aa + aaa + aaaa + aaaaa的前5项之和，其中a是一个数字
//二进制位操作
//int main()
//{
//	int sum = 0;
//	int arr[5] = { 1,11,111,1111,11111 };
//	int a = 0;
//	//a必须为个位正整数
//	do
//	{
//		printf("请输入一个数>:");
//		scanf("%d", &a);
//		if (a < 10 && a > 0)
//		{
//			break;
//		}
//		else
//		{
//			printf("输入错误请重试\n");
//		}
//	} while (1);
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		arr[i] *= a;
//		//b = a;
//		//sum += b;
//		//b *= 10;
//	}
//	i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		sum += arr[i];
//		printf("%d ", arr[i]);
//	}
//	printf("\n%d\n", sum);
//
//	return 0;
//}

//喝汽水，1瓶汽水1元，2个空瓶可以换一瓶汽水
//给20元可以买多少汽水
//(20 / 1) + (20 / 2) + (10 / 2) + (5 / 2) + (2 / 2)
//int main()
//{
//	int price = 20;
//	int num = 0;
//	while (price != 0)
//	{
//		num += price;
//		price /= 2;
//	}
//	printf("%d\n", num);
//
//	return 0;
//}


//VS环境下
//变量在内存中的存储方式（栈区，堆区，静态区）
//数组的越界访问
//int main()
//{
//    int i = 0;
//    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//    for (i = 0; i <= 12; i++)
//    {
//        arr[i] = 0;
//        printf("hello world\n");
//    }
//    return 0;
//}

//调整数组使奇数全部都位于偶数前面
//void adjust(int* pa,int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		if (*(pa + i) / 2 == 0)
//			//偶数
//		{
//
//		}
//		else
//		//奇数
//		{
//
//		}
//	}
//}

//void adjust(int arr[10], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		if (arr[i] % 2 == 0)
//		{
//			/*int tmp = arr[i];
//			arr[i] = arr[sz - i - 1];
//			arr[sz - i - 1] = tmp;*/
//		}
//		else
//		{
//			int tmp = arr[i];
//			arr[i] = arr[sz - i - 1];
//			arr[sz - i - 1] = tmp;
//			//前半部分先将所有奇数调换至数组后部
//			//当遍历到后部时，再将所有奇数和偶数对调
//		}
//	}
//}
//void compare(int arr[5])
//{
//	int j = 0;
//	int i = 0;
//	for (i = 0; i < 4; i++)
//	{
//		int flag = 0;
//		for (j = 0; j < 4; j++)
//		{
//			//有序
//			if (arr[j] > arr[j + 1])
//			{
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//				flag = 1;
//				//无序
//			}
//		}
//		if (flag == 0)
//		{
//			break;
//		}
//	}
//}
//
//
//void adjust(int arr[10], int sz)
//{
//	int arr2[5] = { 0 };
//	//存放奇数
//	int arr3[5] = { 0 };
//	//存放偶数
//	//判断奇偶性
//	int i = 0;
//	int j = 0;
//	int k = 0;
//	for (i = 0; i < sz; i++)
//	{
//		if (arr[i] % 2 != 0)
//		{
//			arr2[j] = arr[i];
//			j++;
//		}
//		else
//		{
//			arr3[k] = arr[i];
//			k++;
//		}
//	}
//	//按升序排大小
//	compare(arr2);
//	//奇数
//	compare(arr3);
//	//偶数
//	for (i = 0; i < 5; i++)
//	{
//		arr[i] = arr2[i];
//	}
//	for (i = 0; i < 5; i++)
//	{
//		arr[i + 5] = arr3[i];
//	}
//}
//
////奇数在前，偶数在后
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	//int arr[] = { 3,4,6,1,3,5,9,4,2,8 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	adjust(arr, sz);
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	return 0;
//}
//数组作为函数参数，传址
//如何传递整个数组
//如何一次性更改整个数组的内容
//void swap_arr(int arr[], int sz)
//{
//	int left = 0;
//	int right = sz - 1;
//	int tmp = 0;
//
//
//	while (left < right)
//	{
//		// 从前往后，找到一个偶数，找到后停止
//		while ((left < right) && (arr[left] % 2 == 1))
//		{
//			left++;
//		}
//
//		// 从后往前找，找一个奇数，找到后停止
//		while ((left < right) && (arr[right] % 2 == 0))
//		{
//			right--;
//		}
//
//		// 如果偶数和奇数都找到，交换这两个数据的位置
//		// 然后继续找，直到两个指针相遇
//		if (left < right)
//		{
//			tmp = arr[left];
//			arr[left] = arr[right];
//			arr[right] = tmp;
//		}
//	}
//}
